package koby99;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class J01_HelloJDBC {

	// JDBC 
	// 데이터베이스에 접근하고 조작하는 것은
	// 아주 중요한 주제중의 하나임
	
	// 데이터베이스에는 여러 브랜드가 있음
	// Oracle, MySQL, MSSQL 등등
	// 모든 데이터베이스 서버는 독점적인
	// 방식을 통해 접근하고 관리하도록 허용됨
	// 따라서, 각각의 데이터베이스에 접근하려면
	// 각 브랜드가 제공하는 기술을 사용해야함
	
	// 운좋게도 자바에서는 서로 다른 데이터베이스에
	// 통일된 방식으로 접근하게 하는 JDBC 를 제공함.
	// Java 7 은 JDBC 4.1 을 제공
	// JDBC Core API : java.sql 패키지
	// JDBC Cptional API : javax.sql 패키지

	// JDBC Driver
	// 데이터 베이스 제조사가 제공하는 라이브러리
	// 각 제조사는 자신만의 독점적인 기술을
	// 이 라이브러리에 포함 시켜 둠
	// 이것을 JDBC API라는 통일된 코드를 이용해서
	// 데이터베이스를 제어할 수 있음
	
	// 데이터베이스 접근 5단계
	// 1. 데이터베이스에 접근하기 위해
	//    'JDBC 드라이버' 불러오기
	// 2. 데이터베이스 '연결' 얻기
	// 3. 실행할 'SQL 문장'을 만들기 위해
	//	   Statement/PreparedStatement 객체 생성
	// 4. SQL 문장을 실행하고 데이터베이스로부터
	//	   넘어온 '결과를 처리'하기 위해
	//	   ResultSet 객체를 생성
	// 5. 모든 처리가 끝나면 JDBC 자원 '해제'
	
	// Oracle JDBC 드리이버 등록
	// ojdbc6.jar 를 라이브러리로 등록
	public static void main(String[] args) {
		// 데이터베이스 연결정보
		final String DRV = "oracle.jdbc.driver.OracleDriver";
		final String URL = "jdbc:oracle:thin:@112.216.253.125:1521:xe";
		final String USR = "koby99";
		final String PWD = "koby99";
		
		// MySQL 데이터베이스 연결정보
		// DRV = "com.mysql.jdvc.Driver"
		// URL = "jdbc:mysql://112.216.253.125:3306/zipcode"
		// USR, PWD = "zipcode"
		
		// 데이터베이스 작업용 객체 정의
		Connection conn = null;				//연결
		PreparedStatement pstmt = null;	//질의
		ResultSet rs = null;						//결과
		String SQL = "select * from employees ";
		
		// 1. JDBC 드라이버 불러오기
		// JDBC 관련코드 작성시 예외처리를 위해
		// try - catch - finally 를 작성해둘 것!
		try {
			// 1. JDBC 드라이버 불러오기
			// Class : 클래스에 대한 객체를 동적으로 생성
			Class.forName( DRV );
			// 2. 데이터베이스 연결
			conn = DriverManager
					.getConnection( URL, USR, PWD );
			// 3. 실행할 SQL 질의 작성
			pstmt = conn.prepareStatement( SQL );
			// 4a. SQL 질의를 실행하고 결과를 받음
			rs = pstmt.executeQuery();
			// 4b. 받은 결과 처리
			if ( rs.next()){ //결과에 데이터가 존재하면
				do{			//계속 반복해서 그것을 처리
					//rs.getXxx() : ResultSet 객체에서 데이터를 가져옴.
					System.out.print(rs.getString("employee_id"));
					System.out.print( " / ");
					System.out.print(rs.getString( 2 ));
					System.out.print(" / ");
					System.out.print(rs.getString(3 ));
					System.out.print( " / ");
					System.out.print(rs.getString( 4 ));
					System.out.print(" / ");
					System.out.print(rs.getString(5));
					System.out.print( " / ");
					System.out.print(rs.getString( 6 ));
					System.out.print(" / ");
					System.out.print(rs.getString(7));
					System.out.print( " / ");
					System.out.print(rs.getString( 8 ));
					System.out.print(" / ");
					System.out.print(rs.getString( 9 ));
					System.out.print(" / ");
					System.out.print(rs.getString(10));
					System.out.print( " / ");
					System.out.println(rs.getString( 11 ));
				}while( rs.next() );
			}else{			//결과에 데이터가 없으면
				System.out.println("데이터가 없어영~");
			}
		}catch (Exception ex){
			ex.printStackTrace();
		}finally{
		// 5. JDBC 객체 해제
		if (rs != null) try	{ rs.close(); rs= null;}catch(Exception e){}
		if (pstmt != null) try { pstmt.close(); pstmt= null;}catch(Exception e){}
		if (conn != null) try { conn.close(); conn= null;}catch(Exception e){}
		}
		
   }//
}///